<?php

namespace Database\Factories;

use App\Models\Bar;
use App\Models\Post;
use App\Models\User;
use Illuminate\Database\Eloquent\Factories\Factory;

/**
 * @extends \Illuminate\Database\Eloquent\Factories\Factory<\App\Models\Post>
 */
class PostFactory extends Factory
{
    /**
     * Define the model's default state.
     *
     * @return array<string, mixed>
     */
    public function definition(): array
    {
        $faker = fake('zh_CN');

        // 真实的帖子标题模板（分类：技术、设计、生活、学习等）
        $titles = [
            // 技术类
            'React 19 新特性深度解析',
            'Vue 3 组合式 API 最佳实践',
            'Laravel 10 新功能体验分享',
            'Python 数据分析实战教程',
            'JavaScript 异步编程进阶',
            'Git 工作流最佳实践',
            'Docker 容器化部署指南',
            '前端性能优化技巧分享',
            '后端 API 设计规范',
            '数据库索引优化经验',
            '微服务架构设计思考',
            '算法学习心得分享',
            
            // 设计类
            'UI 设计趋势 2024',
            '平面设计配色技巧',
            '用户体验设计原则',
            'Logo 设计思路分享',
            '插画风格探索',
            '摄影构图技巧',
            '设计工具推荐',
            
            // 生活类
            '美食制作教程分享',
            '旅行攻略：XX 城市游玩指南',
            '健身计划制定方法',
            '读书笔记：《书名》',
            '电影推荐：最近看的几部好片',
            '宠物饲养经验交流',
            '植物养护小贴士',
            '手工制作教程',
            
            // 学习类
            '英语学习心得分享',
            '编程入门学习路线',
            '考研复习经验总结',
            '技能提升计划',
            
            // 问题类
            '求助：关于 XX 的问题',
            '讨论：大家怎么看 XX？',
            '问题：如何解决 XX？',
            '请教：XX 的最佳实践是什么？',
        ];

        // 真实的帖子内容模板（开头部分）
        $contentPrefixes = [
            '最近在学习',
            '今天想和大家分享',
            '经过一段时间的实践',
            '刚接触这个领域',
            '最近遇到了一个问题',
            '看到很多人在讨论',
            '根据我的经验',
            '最近做的一个项目',
            '想请教一下大家',
            '今天发现了一个不错的',
        ];

        $contentBodies = [
            '，总结了一些经验，希望对大家有帮助。',
            '，感觉还不错，推荐给大家试试。',
            '，过程中遇到了不少问题，记录下来供参考。',
            '，有什么好的建议吗？',
            '，大家有什么想法可以一起讨论。',
            '，这里是我的一些心得体会。',
            '，欢迎大家一起交流学习。',
            '，希望能帮助到有需要的朋友。',
            '，想听听大家的意见和看法。',
            '，期待大家的回复和建议。',
        ];

        $title = $faker->randomElement($titles);
        $content = $faker->randomElement($contentPrefixes) . $faker->sentence(10, 20) . $faker->randomElement($contentBodies);
        // 添加更多随机内容
        $content .= "\n\n" . $faker->paragraph(3, 5);

        return [
            'title' => $title,
            'content' => $content,
            'user_id' => User::inRandomOrder()->first()?->id ?? User::factory(),
            'bar_id' => Bar::inRandomOrder()->first()?->id ?? Bar::factory(),
            'images' => null, // 图片在 Seeder 中处理
            'views' => $faker->numberBetween(10, 5000),
            'like_count' => 0, // 将在 Seeder 中更新
            'reply_count' => 0, // 将在阶段五实现
            'is_pinned' => false,
            'is_essence' => false,
            'pinned_at' => null,
        ];
    }

    /**
     * 设置为置顶帖子
     */
    public function pinned(): static
    {
        return $this->state(fn (array $attributes) => [
            'is_pinned' => true,
            'pinned_at' => fake()->dateTimeBetween('-30 days', 'now'),
        ]);
    }

    /**
     * 设置为精华帖子
     */
    public function essence(): static
    {
        return $this->state(fn (array $attributes) => [
            'is_essence' => true,
        ]);
    }

    /**
     * 设置为热门帖子（较多浏览和点赞）
     */
    public function popular(): static
    {
        return $this->state(fn (array $attributes) => [
            'views' => fake()->numberBetween(1000, 10000),
            'like_count' => fake()->numberBetween(50, 500),
        ]);
    }
}
